package com.bookstore.back.util;

import com.bookstore.back.service.AuthService;
import com.bookstore.back.vo.UserVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

/**
 * 用户上下文工具类
 * 用于获取当前登录用户信息
 * 
 * @author 程序猿_Ti
 * @since 2025-07-22
 */
@Slf4j
@Component
public class UserContextUtil {

    @Autowired
    private AuthService authService;

    /**
     * 获取当前登录用户信息
     * 
     * @return 当前用户信息，如果未登录或token无效则返回null
     */
    public UserVO getCurrentUser() {
        try {
            // 获取当前HTTP请求
            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            if (attributes == null) {
                log.warn("无法获取当前HTTP请求上下文");
                return null;
            }

            HttpServletRequest request = attributes.getRequest();
            
            // 从请求头中获取Authorization
            String authorization = request.getHeader("Authorization");
            if (authorization == null || !authorization.startsWith("Bearer ")) {
                log.warn("请求头中缺少有效的Authorization信息");
                return null;
            }

            // 提取token
            String token = authorization.substring(7); // 移除 "Bearer " 前缀
            
            // 验证token并获取用户信息
            UserVO userVO = authService.validateToken(token);
            if (userVO == null) {
                log.warn("Token无效或已过期");
                return null;
            }

            log.debug("获取当前用户成功，用户ID：{}，用户名：{}", userVO.getId(), userVO.getUsername());
            return userVO;
        } catch (Exception e) {
            log.error("获取当前用户信息失败：{}", e.getMessage());
            return null;
        }
    }

    /**
     * 获取当前登录用户ID
     * 
     * @return 当前用户ID，如果未登录则返回null
     */
    public Long getCurrentUserId() {
        UserVO currentUser = getCurrentUser();
        return currentUser != null ? currentUser.getId() : null;
    }

    /**
     * 获取当前登录用户名
     * 
     * @return 当前用户名，如果未登录则返回null
     */
    public String getCurrentUsername() {
        UserVO currentUser = getCurrentUser();
        return currentUser != null ? currentUser.getUsername() : null;
    }

    /**
     * 获取当前登录用户类型
     * 
     * @return 当前用户类型，如果未登录则返回null
     */
    public String getCurrentUserType() {
        UserVO currentUser = getCurrentUser();
        return currentUser != null ? currentUser.getUserType() : null;
    }

    /**
     * 检查当前用户是否为管理员
     * 
     * @return true-是管理员，false-不是管理员或未登录
     */
    public boolean isCurrentUserAdmin() {
        String userType = getCurrentUserType();
        return "admin".equals(userType);
    }

    /**
     * 检查当前用户是否为商家
     *
     * @return true-是商家，false-不是商家或未登录
     */
    public boolean isCurrentUserMerchant() {
        String userType = getCurrentUserType();
        return "merchant".equals(userType);
    }

    /**
     * 检查当前用户是否为普通用户
     *
     * @return true-是普通用户，false-不是普通用户或未登录
     */
    public boolean isCurrentUserRegular() {
        String userType = getCurrentUserType();
        return "user".equals(userType);
    }
}
